package cn.jsj.dao;

import java.util.List;

import org.hibernate.criterion.Restrictions;

import cn.jsj.pojo.TblAdminPersonnel;
import cn.jsj.pojo.TblLawyer;
import cn.jsj.pojo.TblPracticeLawyer;

/**
 * 行政人员处理类
 * @author LI
 *
 */

public class TblAdminPersonnelDAO  {

	/**
	 * 验证登陆用户是否存在
	 * @param ui：登陆用户对象
	 * @return：用户对象：null：不存在
	 */
	public TblAdminPersonnel userValidate(TblAdminPersonnel ui){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List userList = session.createCriteria(TblAdminPersonnel.class).add(
				Restrictions.eq("adminPersonName", ui.getAdminPersonName()))
				.add(Restrictions.eq("lawyerPwd", ui.getLawyerPwd()))
				.list();
		// 提交事务
		tx.commit();
		session.close();
		//如果用户存在
		if(userList.size()!=0)
		{
			TblAdminPersonnel user=(TblAdminPersonnel)userList.get(0);
		return user;
		}
		else{
			return null;
		}
		}


	/**
	 * 获取行政人员信息条数
	 * @return:行政人员信息条数
	 */
	public int getAdminInfoNumb(){
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List result=session.createCriteria(TblAdminPersonnel.class)
		.add(Restrictions.eq("deleteLabel", 0))
		.list();
		// 提交事务
		tx.commit();
		session.close();
		return result.size();
	}

	/**
	 * 获取指定页面要显示的行政人员
	 * @param startNumb：从第几条开始
	 * @param totalNumb：这一页显示几条
	 * @return：这一页要显示的行政人员队列
	 */
	public java.util.List<TblAdminPersonnel> getTheAdminInfo(int startNumb,int totalNumb){
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List result=session.createCriteria(TblAdminPersonnel.class)
		.add(Restrictions.eq("deleteLabel", 0))
		.setFirstResult(startNumb)
		.setMaxResults(totalNumb)
		.list();
		// 提交事务
		tx.commit();
		session.close();
		return result;
	}


/**
 * 根据行政人员的名字获得该行政人员的信息
 * @param adminName：行政人员的名字
 * @return：1.行政人员对象 2.不存在的话返回NULL
 */
	public cn.jsj.pojo.TblAdminPersonnel getAdminFromName(String adminName){
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List result=session.createCriteria(TblAdminPersonnel.class)
		.add(Restrictions.eq("deleteLabel", 0))
		.add(Restrictions.eq("adminPersonName", adminName))
		.list();
		// 提交事务
		tx.commit();
		session.close();

		//行政人员对象
		TblAdminPersonnel tap;
		//如果存在
		if(result.size()!=0){
			tap=(TblAdminPersonnel)result.get(0);
		}else{
			tap=null;
		}
		return tap;
	}


	/**
	 * 修改行政人员信息
	 * @param tl：修改之后的律师信息对象
	 */
	public void modifyPracLawyerInfo(TblAdminPersonnel tl){
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();

		//获得时间字符串表示
		java.text.DateFormat df=new java.text.SimpleDateFormat("yyyy-MM-dd");
		String dateString=df.format(tl.getBirthTime());

		String hql="update TblAdminPersonnel m set m.adminPersonEmail=?,m.adminPersonName=?,m.adminPersonPhone=?," +
				"m.adminPersonPosition=?,m.adminPersonSex=?,m.educationalLevel=?,m.birthTime=?,m.graduateSchool=?,m.pracAgreement=?," +
				"m.identityNumber=?,m.politicalStatus=?where m.adminPersonId=?";
		session.createQuery(hql).setString(0,tl.getAdminPersonEmail())
		.setString(1,tl.getAdminPersonName())
		.setString(2,tl.getAdminPersonPhone())
		.setString(3, tl.getAdminPersonPosition())
		.setString(4, tl.getAdminPersonSex())
		.setString(5, tl.getEducationalLevel())
		.setString(6,dateString)
		.setString(7,tl.getGraduateSchool())
		.setInteger(8, tl.getPracAgreement())
		.setString(9, tl.getIdentityNumber())
		.setString(10, tl.getPoliticalStatus())
		.setInteger(11, tl.getAdminPersonId())
		.executeUpdate();
		// 提交事务
		tx.commit();
		session.close();
	}

	/**
	 * 删除行政人员信息
	 * @param adminId：要被删除的行政人员信息ID
	 * @return:1：删除成功
	 */
	public int deletePracLawyerInfo(int adminId){
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		String hql="update TblAdminPersonnel m set m.deleteLabel=?where m.adminPersonId=?";
		session.createQuery(hql)
		.setInteger(0, 1)
		.setInteger(1, adminId)
		.executeUpdate();
		// 提交事务
		tx.commit();
		session.close();
		return 1;
	}

	/**
	 * 根据行政人员的ID获得该行政人员的信息
	 * @param adminId：行政人员的ID
	 * @return：1.行政人员对象 2.不存在的话返回NULL
	 */
		public cn.jsj.pojo.TblAdminPersonnel getAdminFromId(int adminId){
			org.hibernate.Session session = HBUtils.getSession();
			// 新建事务对象
			org.hibernate.Transaction tx = session.beginTransaction();
			// 开始事务
			tx.begin();
			List result=session.createCriteria(TblAdminPersonnel.class)
			.add(Restrictions.eq("deleteLabel", 0))
			.add(Restrictions.eq("adminPersonId", adminId))
			.list();
			// 提交事务
			tx.commit();
			session.close();

			//行政人员对象
			TblAdminPersonnel tap;
			//如果存在
			if(result.size()!=0){
				tap=(TblAdminPersonnel)result.get(0);
			}else{
				tap=null;
			}
			return tap;
		}


		/**
		 * 修改用户密码
		 * @param oldPwd：旧密码
		 * @param newPwd：新密码
		 * @param lawyerId：用户id
		 * @return：1:修改成功 0：修改失败
		 */
		public int modifyPassword(String oldPwd,String newPwd,int adminPersonId){
			org.hibernate.Session session = HBUtils.getSession();
			// 新建事务对象
			org.hibernate.Transaction tx = session.beginTransaction();
			// 开始事务
			tx.begin();
			List result=session.createCriteria(TblAdminPersonnel.class)
			.add(Restrictions.eq("adminPersonId", adminPersonId))
			.list();

			TblAdminPersonnel lawyer=(TblAdminPersonnel)result.get(0);
			//得到用户密码
			String password=lawyer.getLawyerPwd();
			//判断输入的旧密码是否正确
			if(password.equalsIgnoreCase(oldPwd))
			{
				//修改用户密码
				String hql="update TblAdminPersonnel m set m.lawyerPwd=?where m.adminPersonId=?";
				session.createQuery(hql)
				.setString(0, newPwd)
				.setInteger(1, adminPersonId)
				.executeUpdate();
				// 提交事务
				tx.commit();
				session.close();
				return 1;
			}
			else{
				// 提交事务
				tx.commit();
				session.close();
				return 0;
			}
		}

		/**
		 * 修改用户的联系方式
		 * @param contactWay：新的联系方式
		 * @param adminId：用户id
		 * @return：1 修改成功
		 */
		public int modifyContactWay(String contactWay,int adminId){
			org.hibernate.Session session = HBUtils.getSession();
			// 新建事务对象
			org.hibernate.Transaction tx = session.beginTransaction();
			// 开始事务
			tx.begin();
			//修改用户密码
			String hql="update TblAdminPersonnel m set m.adminPersonPhone=?where m.adminPersonId=?";
			session.createQuery(hql)
			.setString(0, contactWay)
			.setInteger(1, adminId)
			.executeUpdate();
			// 提交事务
			tx.commit();
			session.close();
			return 1;
		}

		/**
		 *  保存行政人员信息
		 * @param tap：行政人员对象
		 * @return：1：保存成功
		 */
		public int saveAdminPerson(cn.jsj.pojo.TblAdminPersonnel tap){
			org.hibernate.Session session = HBUtils.getSession();
			// 新建事务对象
			org.hibernate.Transaction tx = session.beginTransaction();
			// 开始事务
			tx.begin();
			session .save(tap);
			// 提交事务
			tx.commit();
			session.close();
			return 1;
		}

}